package org.abc.fund.config.converter;

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

@Converter(autoApply = true) // autoApply=true 表示全局应用
public class LocalDateConverter implements AttributeConverter<LocalDate, String> {

  // 使用 ISO 8601 格式 (yyyy-MM-dd)
  private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE;

  @Override
  public String convertToDatabaseColumn(LocalDate date) {
    return (date != null) ? date.format(FORMATTER) : null;
  }

  @Override
  public LocalDate convertToEntityAttribute(String dbData) {
    if (dbData == null || dbData.trim().isEmpty()) {
      return null;
    }

    try {
      // 尝试用标准格式解析
      return LocalDate.parse(dbData, FORMATTER);
    } catch (DateTimeParseException e) {
      // 如果解析失败（无论是格式问题还是日期值问题），都抛出非法参数异常
      // 这样可以被 RestExceptionHandler 统一处理
      throw new IllegalArgumentException("无效的日期格式或值: " + dbData, e);
    }
  }
}
